'''
如果字符串满足以下条件之一，则可以称之为 有效括号字符串（valid parentheses string，可以简写为 VPS）：

    字符串是一个空字符串 ""，或者是一个不为 "(" 或 ")" 的单字符。
    字符串可以写为 AB（A 与 B 字符串连接），其中 A 和 B 都是 有效括号字符串 。
    字符串可以写为 (A)，其中 A 是一个 有效括号字符串 。

类似地，可以定义任何有效括号字符串 S 的 嵌套深度 depth(S)：

    depth("") = 0
    depth(C) = 0，其中 C 是单个字符的字符串，且该字符不是 "(" 或者 ")"
    depth(A + B) = max(depth(A), depth(B))，其中 A 和 B 都是 有效括号字符串
    depth("(" + A + ")") = 1 + depth(A)，其中 A 是一个 有效括号字符串

例如：""、"()()"、"()(()())" 都是 有效括号字符串（嵌套深度分别为 0、1、2），而 ")(" 、"(()" 都不是 有效括号字符串 。

给你一个 有效括号字符串 s，返回该字符串的 s 嵌套深度 。

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/maximum-nesting-depth-of-the-parentheses
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

示例：
输入：s = "(1+(2*3)+((8)/4))+1"
输出：3
解释：数字 8 在嵌套的 3 层括号中。
'''


from collections import defaultdict
from itertools import accumulate

class Solution:
    def maxDepth(self, s: str) -> int:
        '''
        1. 对字典使用map(defaultdict.__getitem__, s)，是把s的每一个元素与字典的key相匹配，
           匹配到对应的key就变成value
        2. 使用defaultdict而不是dict，是因为，原生字典遇到内部不存在的key就会报错，
            而defaultdict的第一个参数为默认类型，
            意思是，遇见不存在的key，就返回 false 对应的类型的值
            比如设为int，那么返回0，设为bool则返回false
        3. map(A,B)最后返回的是一个map对象，但可以通过转换为list查看内容
        4. accumulate累加，是吧当前的值与前面的所有值相加
        '''
        # print(defaultdict(int, {'(': 1, ')': -1}).__getitem__)
        # print('defaultdict: ', list(defaultdict(int, {'(': 1, ')': -1})))
        # print('map:', list(map(defaultdict(int, {'(': 1, ')': -1}).__getitem__, s)))
        # # accumulate累加，y(i) = y(i-1) + x(i)
        # print("accumulate: ", list(accumulate(map(defaultdict(int, {'(': 1, ')': -1}).__getitem__, s))))

        dic = defaultdict(int, {'(': 1, ')': -1})
        temp = map(dic.__getitem__, s)
        acc = accumulate(temp)
        print('type ',type(acc))
        res = max(acc)
        return res
        # return max(accumulate(map(defaultdict(int, {'(': 1, ')': -1}).__getitem__, s)))


str01 = "(1+(2*3)+((8)/4))+1"
print('len(str): ', len(str01))
s = Solution()
print(s.maxDepth(str01))


'''--------------------测试-------------'''
a = {'a':1,'b':2, 'c':3}
print(a.__getitem__('a'))

b = defaultdict(int, {'a':1,'b':2})
print(b['c'])








